package br.com.paulo.compra;

import java.io.Serializable;
import java.util.Date;
import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;


/**
 * The persistent class for the pedido database table.
 * 
 */
@Entity
@Table(name="pedido")
@NamedQueries({ 
	@NamedQuery(name="Pedido.findAll", query="SELECT p FROM Pedido p"),
	@NamedQuery(name="Pedido.getProdutosByIdPedido", query="SELECT p.idNota, pl.deProduto FROM Pedido p JOIN p.produtos pl WHERE p.idPedido = :id")
})
public class Pedido implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5675378545750141587L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id_pedido", unique=true, nullable=false)
	private int idPedido;

	@Column(name="id_nota", nullable=false)
	private int idNota;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_compra")
	private Date datacompra;
	
	@OneToMany
	@JoinTable(name="produto_pedido",
	joinColumns=@JoinColumn(name="fk_pedido"),
	inverseJoinColumns=@JoinColumn(name="fk_produto"))
	private Collection<Produto> produtos = new ArrayList<Produto>();
	
	@Version
	private Long versao;
	

	public Pedido() {
	}

	public int getIdPedido() {
		return this.idPedido;
	}

	public void setIdPedido(int idPedido) {
		this.idPedido = idPedido;
	}

	public int getIdNota() {
		return this.idNota;
	}

	public void setIdNota(int idNota) {
		this.idNota = idNota;
	}
	
	public Collection<Produto> getProdutos() {
		return produtos;
	}

	public void setProdutos(Collection<Produto> produtos) {
		this.produtos = produtos;
	}

	public Date getDatacompra() {
		return datacompra;
	}

	public void setDatacompra(Date datacompra) {
		this.datacompra = datacompra;
	}

	@Override
	public String toString() {
		return "Pedido [idPedido=" + idPedido + ", idNota=" + idNota
				+ ", datacompra=" + datacompra + ", produtos=" + produtos
				+ ", versao=" + versao + "]";
	}

}